#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

struct mooncake{
	float mount, price, unit;
};

int cmp(mooncake a, mooncake b){
	return a.unit > b.unit;
}

int main(){
	int n, need;
	cin >> n >> need;
	vector<mooncake> a(n);
	for(int i = 0; i < n; i++)
		cin >> a[i].mount;
	for(int i = 0; i < n; i++)
		cin >> a[i].price;
	for(int i = 0; i < n; i++)
		a[i].unit = a[i].price / a[i].mount;
	sort(a.begin(), a.end(), cmp);
	float result = 0.0;
	for(int i = 0; i < n; i++){
		if(a[i].mount <= need){
			result = result + a[i].price;
		}else{
			result = result + a[i].unit * need;
			break;
		}
		need = need - a[i].mount;
	}
	printf("%.2f", result);
	return 0;
}
